package com.suixuan.support.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Nanjing Zhou Su co.,Ltd
 * 
 * @author jshu
 * @version 1.0 date : Jan 22, 2010 1:41:26 AM 日期相关工具类
 */
public final class DateUtils {
	public  final static String Y_M_D = "yyyy-MM-dd" ;
	public final static String Y_M_D_H_M_S = "yyyy-MM-dd:HH:mm:ss" ;
    private DateUtils() {
    }

    /**
     * 时间转换成字符串
     * 
     * @param pattern
     *            日期和时间格式
     * @param date
     *            时间
     * @return 格式化的时间字符串
     */
    public static String dateFormat(String pattern, Date date) {
        return new SimpleDateFormat(pattern).format(date);
    }

    /**
     * 时间转换成字符串(该方法会取当前系统时间)
     * 
     * @param pattern
     *            日期和时间格式
     * @return 格式化的时间字符串
     */
    public static String parseText(String pattern) {
        return new SimpleDateFormat(pattern).format(new Date());
    }

    /**
     * 格式化的时间字符串转换成时间
     * 
     * @param pattern
     *            日期和时间格式
     * @param dateStr
     *            格式化的时间字符串
     * @return 日期对象
     * @throws ParseException
     *             无法转换抛出异常
     */
    public static Date parseDate(String pattern, String dateStr)
            throws ParseException {
        return new SimpleDateFormat(pattern).parse(dateStr);
    }

    /**
     * n天距离当前时间的毫秒值
     * 
     * @param day
     *            距离天数
     * @return 毫秒值
     */
    public static long getFewDaysLater(int day) {
        long currentTime = System.currentTimeMillis();
        long fewDayTime = ConstantUtils.ONE_DAY * day;
        return currentTime - fewDayTime;
    }

    /**
     * 根据毫秒值格式化日期
     * 
     * @param times
     *            毫秒值
     * @return 日期
     */
    public static Date formateDate(long times) {
        return new Date(times);
    }
	/**
	 * 返回系统当前时间的年月日格式
	 * 
	 * @return
	 */
	public static String currentDataYMD() {
		return parseText(Y_M_D);
	}

	/**
	 * 返回系统当前时间的年月日时分秒
	 * 
	 * @return
	 */
	public static String currentDataYMDHMS() {
		return parseText(Y_M_D_H_M_S);
	}

	/**
	 * 返回系统当前时间的前几天(days < 0)或者后几天(days > 0) 日期格式化是yyyy-MM-dd
	 * 
	 * @param days
	 * @return
	 */
	public static String currentDataAfterDate(int days) {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DATE, days);

		return new SimpleDateFormat(Y_M_D).format(calendar.getTime());
	}

	/**
	 * 返回系统当前时间的前几天(days < 0)或者后几天(days > 0) 日期格式化是yyyy-MM-dd:HH:mm:ss
	 * 
	 * @param days
	 * @return
	 */
	public static String currentDataAfterDateToLongFormat(int days) {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DATE, days);

		return new SimpleDateFormat(Y_M_D_H_M_S).format(calendar.getTime());
	}
}
